//////////////////////////////////////////////////////////////////////////

#ifndef _CONNECTIONPACKET_H_
#define _CONNECTIONPACKET_H_

//////////////////////////////////////////////////////////////////////////

#ifndef _PACKET_H_
#include "packet.h"
#endif

//////////////////////////////////////////////////////////////////////////


/** Class for network packets
*
*  @author   Roman Pasechnik
*  @since    Jul 04th, 2009
*  @updated  Jul 04th, 2009
*/
class ConnectionPacket : public Packet
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Packet codes */
    enum PacketCode
    {
        REGULAR,
        CLIENT_ENDPOINT_DATA
    };


//////////////////////////////////////////////////////////////////////////


    /** Constructor */
    ConnectionPacket ( const Packet& _packet,
                       PacketCode _packetCode = REGULAR );


    /** Constructor */
    ConnectionPacket ( const char* _data, size_t _length );


////////////////////////////////////////////////////////////////////////////////


    /** Get packet code */
    PacketCode GetPacketCode() const;


    /** Get packet code */
    void SetPacketCode( PacketCode _code );


////////////////////////////////////////////////////////////////////////////////


    /** Move packet code to data */
    void PackCode();


    /** Extract packet code from data */
    void UnPackCode();


////////////////////////////////////////////////////////////////////////////////

private:

////////////////////////////////////////////////////////////////////////////////


    /** ConnectionPacket code */
    PacketCode m_PacketCode;


//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
